[bits 32]
section .text

global _task_switch
_task_switch:
    push esi ; 保存状态
    push edi
    push ebx
    push ebp
    mov eax, esp

    and eax, 0xFFFFF000 ; 保存当前任务的内核栈
    mov [eax], esp
    mov eax, [esp + 20] ; 设置 esp 为下一个任务的内核栈
    mov esp, [eax] 

    pop ebp ; 恢复状态
    pop ebx
    pop edi
    pop esi
    ret ; 返回到下一个任务
